package com.easylinkin.linkappapi.quality.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.easylinkin.linkappapi.quality.dto.ActualMeasureTypeDto;
import com.easylinkin.linkappapi.quality.entity.ActualMeasureType;
import com.easylinkin.linkappapi.quality.entity.vo.ActualMeasureTypeVo;
import com.easylinkin.linkappapi.quality.entity.vo.QualityScreenPageVo;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * ActualMeasureType表数据库访问层
 *
 * @author zhengwen
 * @date 2022/08/30
 */
public interface ActualMeasureTypeMapper extends BaseMapper<ActualMeasureType> {


    /**
     * 查询分页
     *
     * @param page        分页参数对象
     * @param appQualityActualMeasureType 过滤参数对象
     * @return 查询分页结果
     */
    IPage<ActualMeasureType> selectPage(Page page, @Param("appQualityActualMeasureType") ActualMeasureType appQualityActualMeasureType);

    /**
     * 查询单条
     *
     * @param id 主键id
     * @return 查询结果
     */
    ActualMeasureType getOneById(@Param("id") Serializable id);

    /**
     * 根据条件查询实测实量分类带算法
     * @param paramVo 条件vo
     * @return 实测实量分类带算法List
     */
    List<ActualMeasureTypeDto> selectTypeDtoList(ActualMeasureTypeVo paramVo);


    /**
     * 使用sql修改fullName
     * @param paramVo 条件
     */
    int updateTypeFullName(ActualMeasureTypeVo paramVo);

    /**
     * 根据父级id查询（不排除是否删除）
     * @param parentId 父级id
     * @return
     */
    List<ActualMeasureType> selectByParentId(Long parentId);

    /**
     * 测量分类排名
     * @param qualityScreenPageVo 条件vo
     * @return 统一出参
     */
    List<Map<String, Object>> actualMeasureTypeCount(QualityScreenPageVo qualityScreenPageVo);

    /**
     * 统计实测实量根据租户分组
     * @param tenantIds 租户ids
     * @return 统计
     */
    List<Map<String, Object>> countTypeGroupByTeanant(@Param("tenantIds") List<String> tenantIds);

    /**
     * 实测实量测量排名
     * @param qualityScreenPageVo 条件vo
     * @return 排名数据
     */
    List<Map<String, Object>> actualMeasureCountTop(QualityScreenPageVo qualityScreenPageVo);

    /**
     * 实测实量分类统计数量与合格率
     * @return 统计结果
     */
    List<Map<String, Object>> actualMeasureTypeCountAndRate();
}

